# -*- coding: utf-8 -*-
import copyimport jsonimport randomfrom mod.server import extraServerApifrom mod_log import loggerfrom legendaryPowerScript._lpcommon import apiUtilfrom legendaryPowerScript.item.legendaryItem import LegendaryItemclass ItemType:
    """
    物品类型
    从common/items中读取的每个物品类型都会变成一个ItemType类
    此外，在GetItemType中，若传入的物品类型以 minecraft: 开头，则会自动生成一个原版物品的ItemType
    """

    def __init__(self, name, data):
        """
        Attributes:
            - name (str): 物品的名称。
            - path (str): 物品的路径。
            - useInfileId (bool): 表示是否使用文件内ID。
            - itemType (str): 物品的类型，默认为"minecraft:wooden_sword"。
            - auxValue (int): 物品的附加值，默认为0。
            - displayName (str): 物品的显示名称，默认为None。
            - description (list[str]): 物品的描述列表。
            - itemHadInDesc (list[str]): 物品描述中包含的物品列表。
            - isVanilla (bool): 表示是否是原版物品。
            - rank (str): 物品的品级。
            - stars (int): 物品的星级。
            - canStore (bool): 表示是否可以放入仓库，默认为True。
            - overlay (str): 覆盖字。
            - modelAttachments (dict[str, str]): 模型附件。
            - flyAttachments (dict[str, str]): 飞行模型附件。
            - isTradable (bool): 表示物品是否可交易，默认为True。
            - lockedAfterTrade (bool): 表示物品在交易后是否被锁定，默认为True。
            - removeIfAmountZero (bool): 表示当物品数量为零时是否移除，默认为True。
            - requireTradable (bool): 表示是否需要解绑才能装备，默认根据配置决定。
            - autoBind (bool): 表示是否自动绑定，默认为False。
            - isResultTradable (bool): 表示抽奖产出的物品是否可交易，默认为False。
            - isGenerated (bool): 表示物品是否已生成，默认为False。
            - disguiseSet (str): 幻化套装。
            - standAnimation (dict[str, str]): 静止动画。
            - moveAnimation (dict[str, str]): 移动动画。
            - flyStandAnimation (dict[str, str]): 飞行静止动画。
            - flyMoveAnimation (dict[str, str]): 飞行移动动画。
            - grantsSkill (str): 赋予的技能。
            - boundModel (str): 绑定的实体模型。
            - spawnInVanillaLoot (bool): 表示物品是否生成在原版宝箱中。
            - slot2Skill (dict[int, str]): 技能槽位列表。
            - modelName (str): 模型名称。
            - hidePieces (list[str]): 隐藏部位。
            - particles (list[str]): 特效列表。
            - templateName (str): 模板名称。
            - enhanceAddLevel (int): 强化增加等级。
            - enhanceMultiplier (float): 强化增加属性比例。
            - enhanceMultiplierPerLevel (float): 强化每级增加属性比例。
            - enhanceMultiplierOverride (dict[str, float]): 强化增加属性的特殊节点。
            - requireClass (str): 需要的职业。
            - enhanceSideStats (list[str]): 强化增加副词条。
            - enhanceSideStatsCount (int): 强化副词条上限。
            - enhanceMaxLevel (int): 强化上限。
            - enhanceSideStatsLevel (list[int]): 强化副属性等级列表。
            - enhanceMainStat (str): 主词条。
            - enhanceMainStatAmount (float): 强化主词条的属性比例。
            - enhanceConsumeEquip (dict[str, int]): 强化消耗其他装备。
            - enhancePriceM (float): 强化价格系数。
            - offerEnhanceXp (int): 提供的强化经验。
            - enhanceConsumeXpBase (int): 强化经验基数。
            - enhanceConsumeXpOffset (int): 强化经验偏移。
            - enhanceConsumeXpM (float): 强化经验系数。
            - enhanceConsumeXpC (float): 强化经验指数。
            - consumeItemKeyword (str): 消耗经验物品关键词。
            - tagEnhanceRate (float): 词条强化增幅。
            - jadeEnhanceMultiplier (float): 宝石强化增加倍率。
            - jadeEmbedableOn (str): 可镶嵌的位置。
            - fetchSource (str): 获取方式。
            - editedFetchSource (bool): 是否已编辑获取方式。
            - breakThroughLevels (dict[str, int]): 突破等级。
            - maxedOutMessage (str): 达到强化上限时显示的信息。
            - isWing (bool): 是否为翅膀。
            - isGlider (bool): 是否为滑翔翼。
            - glideCommand (str): 滑翔翼的飞行指令。
            - glideBuffs (list[str]): 滑翔翼的飞行BUFF。
            - sellInto (str): 可售出的物品名称。
            - sellIntoUnBound (str): 可与其他玩家交易的物品名称。
            - sellPrice (int): 出售价格。
            - classIcon (str): 职业图标。
            - equipCommands (list[str]): 装备指令。
            - getCommands (list[str]): 获取指令。
            - getCommandsInstead (list[str]): 改为获取指令。
            - useCommands (list[str]): 使用指令。
            - sellCommands (list[str]): 出售指令。
            - sellLabel (str): 出售标签。
            - restrictSellCount (bool): 是否限制售卖次数。
            - useCooldown (float): 使用冷却时间。
            - useable (bool): 物品是否可以用于快捷栏。
            - useReqLevel (bool): 是否需要在特定等级才能使用物品。
            - useConsume (int): 使用物品消耗量。
            - useInvConsume (int): 在背包中使用物品的消耗量。
            - useCooldownType (str): 冷却类型。
            - useLabel (str): 物品使用标签。
            - invUseCommands (list[str]): 在背包中使用指令。
            - swapTag (dict): 替换词条。
            - boundTags (list): 绑定的词条。
            - setTags (dict): 套装词条。
            - setKeyword (str): 套装名称。
            - changeModelTexture (str): 更改模型纹理。
            - isQuest (bool): 物品是否为任务物品。
            - maxStackSize (int): 物品最大可堆叠数量。
            - jadeCategory (str): 宝石类型。
            - mergeInto (str): 可以将该物品合并到的物品名称。
            - mergeCosts (dict): 合并所需材料。
            - moneyId (int): 货币类型。
            - weightPerItem (int): 单个物品的重量。
            - variableId (str): 变量类型。
            - enhanceCosts (dict): 强化所需材料。
            - petCanUseScript (str): 精灵使用条件脚本。
            - petOnUseScript (str): 精灵使用时脚本。
            - isPet (bool): 物品是否为宠物。
        """
        self.name = ""  # type: str
        self.path = ""  # type: str
        self.useInfileId = False  # type: bool
        self.itemType = ""  # type: str
        self.auxValue = 0  # type: int
        self.displayName = ""  # type: str
        self.description = []  # type: list[str]
        self.itemHadInDesc = []  # type: list[str]
        self.isVanilla = False  # type: bool
        self.rank = ""  # type: str
        self.stars = 0  # type: int
        self.canStore = False  # type: bool
        self.overlay = ""  # type: str
        self.modelAttachments = {}  # type: dict[str, str]
        self.flyAttachments = {}  # type: dict[str, str]
        self.isTradable = False  # type: bool
        self.lockedAfterTrade = False  # type: bool
        self.removeIfAmountZero = False  # type: bool
        self.requireTradable = False  # type: bool
        self.autoBind = False  # type: bool
        self.isResultTradable = False  # type: bool
        self.isGenerated = False  # type: bool
        self.disguiseSet = ""  # type: str
        self.standAnimation = {}  # type: dict[str, str]
        self.moveAnimation = {}  # type: dict[str, str]
        self.flyStandAnimation = {}  # type: dict[str, str]
        self.flyMoveAnimation = {}  # type: dict[str, str]
        self.grantsSkill = ""  # type: str
        self.boundModel = ""  # type: str
        self.spawnInVanillaLoot = False  # type: bool
        self.slot2Skill = {}  # type: dict[int, str]
        self.modelName = ""  # type: str
        self.hidePieces = []  # type: list[str]
        self.particles = []  # type: list[str]
        self.templateName = ""  # type: str
        self.enhanceAddLevel = 0  # type: int
        self.enhanceMultiplier = 0.0  # type: float
        self.enhanceMultiplierPerLevel = 0.0  # type: float
        self.enhanceMultiplierOverride = {}  # type: dict[str, float]
        self.requireClass = ""  # type: str
        self.enhanceSideStats = []  # type: list[str]
        self.enhanceSideStatsCount = 0  # type: int
        self.enhanceMaxLevel = 0  # type: int
        self.enhanceSideStatsLevel = []  # type: list[int]
        self.enhanceMainStat = ""  # type: str
        self.enhanceMainStatAmount = 0.0  # type: float
        self.enhanceConsumeEquip = {}  # type: dict[str, int]
        self.enhancePriceM = 0.0  # type: float
        self.offerEnhanceXp = 0  # type: int
        self.enhanceConsumeXpBase = 0  # type: int
        self.enhanceConsumeXpOffset = 0  # type: int
        self.enhanceConsumeXpM = 0.0  # type: float
        self.enhanceConsumeXpC = 0.0  # type: float
        self.consumeItemKeyword = ""  # type: str
        self.tagEnhanceRate = 0.0  # type: float
        self.jadeEnhanceMultiplier = 0.0  # type: float
        self.jadeEmbedableOn = ""  # type: str
        self.fetchSource = ""  # type: str
        self.editedFetchSource = False  # type: bool
        self.breakThroughLevels = {}  # type: dict[str, int]
        self.maxedOutMessage = ""  # type: str
        self.isWing = False  # type: bool
        self.isGlider = False  # type: bool
        self.glideCommand = ""  # type: str
        self.glideBuffs = []  # type: list[str]
        self.sellInto = ""  # type: str
        self.sellIntoUnBound = ""  # type: str
        self.sellPrice = 0  # type: int
        self.classIcon = ""  # type: str
        self.equipCommands = []  # type: list[str]
        self.getCommands = []  # type: list[str]
        self.getCommandsInstead = []  # type: list[str]
        self.useCommands = []  # type: list[str]
        self.sellCommands = []  # type: list[str]
        self.sellLabel = ""  # type: str
        self.restrictSellCount = False  # type: bool
        self.useCooldown = 0.0  # type: float
        self.useable = False  # type: bool
        self.useReqLevel = False  # type: bool
        self.useConsume = 0  # type: int
        self.useInvConsume = 0  # type: int
        self.useCooldownType = ""  # type: str
        self.useLabel = ""  # type: str
        self.invUseCommands = []  # type: list[str]
        self.swapTag = {}  # type: dict
        self.boundTags = []  # type: list
        self.setTags = {}  # type: dict
        self.setKeyword = ""  # type: str
        self.changeModelTexture = ""  # type: str
        self.isQuest = False  # type: bool
        self.maxStackSize = 0  # type: int
        self.jadeCategory = ""  # type: str
        self.mergeInto = ""  # type: str
        self.mergeCosts = {}  # type: dict
        self.moneyId = 0  # type: int
        self.weightPerItem = 0  # type: int
        self.variableId = ""  # type: str
        self.enhanceCosts = {}  # type: dict
        self.petCanUseScript = ""  # type: str
        self.petOnUseScript = ""  # type: str
        self.isPet = False  # type: bool
        pass

    def getEnhanceMultiplier(self, enhance):
        # type: (float) -> float
        """
        获取强化增强属性的倍率。

        参数：
            - enhance (float)：增强值

        返回：
            - enhanceMultiplier (float)：增强倍率
        """
        pass

    def _markGrantedSkillTemp(self):
        # type: () -> None
        """
        标记装备此物品获得的技能为临时技能。（在卸下装备时移除技能）
        """
        pass

    def toItem(self, amount=1, skipGenerate=False):
        # type: (int, bool) -> LegendaryItem
        """
        将此物品类型转化为LegendaryItem对象。

        参数：
            - amount (int)：数量，默认为1
            - skipGenerate (bool)：是否跳过生成，默认为False

        返回：
            - item (LegendaryItem)：转化后的LegendaryItem对象
        """
        pass

class Quality:
    """
    表示物品品质的类。

    方法：
        - randomQuality() -> Quality：随机获取一个品质对象
    """

    def __init__(self, name, data):
        """
        参数：
            - name (str)：品质名称
            - data (dict)：包含品质属性的数据字典
        属性：
            - name (str)：品质名称
            - id (int)：品质ID
            - multiplier (float)：属性乘以倍数
            - weight (float)：品质比重
        """
        self.name = ""  # type: str
        self.id = 0  # type: int
        self.multiplier = 0.0  # type: float
        self.weight = 0.0  # type: float
        pass

    def randomQuality(cls):
        # type: () -> Quality
        """
        随机Roll一个品质。
        返回：
            - quality (Quality)：随机获取的品质对象
        """
        pass

def GetItemType(name):
    # type: (str) -> ItemType
    """
    这是一个Python函数，接受一个字符串参数name，并返回一个ItemType类型的值。函数会根据传入的name不同进行不同的处理：
    如果name在_itemtypes中，则直接返回它对应的ItemType类型的值；
    如果name中包含"minecraft:"，则返回一个对应原版物品的ItemType类型；
    否则，返回None。
    """
    pass

